抽象工厂是基于工厂方法模式,支持创建多种n种对象
类图
回顾一下工厂方法,定义了一种要创建的目标Thing,而抽象工厂,则是定义了n种要创建的目标,例如Thing1,Thing2,我们可以认为n个工厂方法组合起来就是抽象工厂。
工厂方法和抽象工厂的接口区别如下:
抽象工厂详细类图:
示例
第一种创建的目标:
public interface Thing1 {}
public class ConcreteThing1A implements Thing1 {}
public class ConcreteThing1B implements Thing1 {}
第二种要创建的目标:
public interface Thing2 {}
public class ConcreteThing2A implements Thing2 {}
public class ConcreteThing2B implements Thing2 {}
定义抽象工厂,支持创建2种目标
public abstract AbstractFactory {
abstract Thing1 createThing1();
abstract Thing2 createThing2();
}
public class ConcreteFactory1 extends AbstractFactory {
@overrite
public Thing1 createThing1(){
return new ConcreteThing1A();
}
@overrite
public Thing2 createThing2(){
return new ConcreteThing2A();
}
}
public class ConcreteFactory2 extends AbstractFactory {
@overrite
public Thing1 createThing1(){
return new ConcreteThing1B();
}
@overrite
public Thing2 createThing2(){
return new ConcreteThing2B();
}
}